package com.woniuxy.admin.util;

import com.woniuxy.redis.util.RedisUtil;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import org.springframework.web.bind.annotation.PostMapping;

import java.security.Key;
import java.util.Date;
import java.util.Map;
/**
 * JWT解析工具类
 */
public class JWTUtil {
    /**
     * 用户加密令牌
     */
    static String userSect ="sjcdiyvhalhxyajlsjvgdoplmcqjfsoa";
    /**
     * 管理员加密令牌
     */
    static String adminSect ="ksaasfdasdfadsfwfrasdfsadffcasijfasadfasfdlkfjlasjflksajfd";

    /**
     * 创建用户token
     * @param body 需加密的信息
     * @param mil 过期时间
     * @return 字符串
     */
    public static String createUserToken(Map<String, Object> body, Integer mil) {
        Key key = Keys.hmacShaKeyFor(userSect.getBytes());
        return Jwts.builder()
                .setClaims(body)
                .setExpiration(new Date(System.currentTimeMillis() + mil * 60 * 1000))
                .signWith(key)
                .compact();
    }

    /**
     * 解析用户token
     * @param token 字符串
     * @return 之前创建所保存的信息
     */
    public static Claims parseUserToken(String token) {
        Key key = Keys.hmacShaKeyFor(userSect.getBytes());
        return Jwts.parserBuilder().setSigningKey(key)
                .build().parseClaimsJws(token).getBody();
    }

    /**
     * 获取用户账号
     * @param token 字符串
     * @return 用户id
     */
    public static Integer getUserId(String token){
        RedisUtil redisUtil=new RedisUtil();
        String refreshToken = redisUtil.get(token);
        int userId = Integer.parseInt(JWTUtil.parseUserToken(refreshToken).get("userId").toString());
        return userId;
    }


    /**
     * 创建管理员token
     * @param body 需加密的信息
     * @param mil 过期时间
     * @return 字符串
     */
    public static String createAdminToken(Map<String, Object> body, Integer mil) {
        Key key = Keys.hmacShaKeyFor(adminSect.getBytes());
        return Jwts.builder()
                .setClaims(body)
                .setExpiration(new Date(System.currentTimeMillis() + mil * 60 * 1000))
                .signWith(key)
                .compact();
    }

    /**
     * 解析管理员token
     * @param token 字符串
     * @return 之前创建所保存的信息
     */
    public static Claims parseAdminToken(String token) {
        Key key = Keys.hmacShaKeyFor(adminSect.getBytes());
        return Jwts.parserBuilder().setSigningKey(key)
                .build().parseClaimsJws(token).getBody();
    }

    /**
     * 获取管理员账号
     * @param token 字符串
     * @return
     */
    public static Integer getAdminAccountId(String token){
        RedisUtil redisUtil=new RedisUtil();
        String refreshToken = redisUtil.get(token);
        int accountId = Integer.parseInt(JWTUtil.parseAdminToken(refreshToken).get("accountId").toString());
        return accountId;
    }

}
